package com.lightsaber.trade.as.service.reta;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.lightsaber.trade.as.dao.reta.OrderTemplateDao;
import com.lightsaber.trade.as.dao.reta.OrderTemplateItemDao;
import com.lightsaber.trade.as.dao.reta.ProductDao;
import com.lightsaber.trade.as.entity.reta.OrderTemplate;
import com.lightsaber.trade.as.entity.reta.OrderTemplateItem;
import com.lightsaber.trade.as.entity.reta.Product;
import com.lightsaber.trade.core.dao.BaseDao;
import com.lightsaber.trade.core.service.BaseServiceImpl;

@Service
@Transactional
public class OrderTemplateItemManager extends BaseServiceImpl<OrderTemplateItem, String> {
    @Autowired
    private OrderTemplateItemDao orderTemplateItemDao;
    @Autowired
    private OrderTemplateDao orderTemplateDao;
    @Autowired
    private ProductDao productDao;

    @Override
    protected BaseDao<OrderTemplateItem, String> getDao() {
        return orderTemplateItemDao;
    }


    public void confirmSelectedProducts(String orderTemplateId, Map<String, String> selectedIdsMap) {
        OrderTemplate orderTemplate = orderTemplateDao.get(orderTemplateId);

        for (String id : selectedIdsMap.keySet()) {
            Product product = productDao.get(id);

            OrderTemplateItem orderTemplateItem = new OrderTemplateItem();
            orderTemplateItem.setProduct(product);
            orderTemplateItem.setOrderTemplate(orderTemplate);
            orderTemplateItem.setPrice(product.getDefaultPrice());
            orderTemplateItem.setNumber(1f);

            this.save(orderTemplateItem);
        }

    }

    public void delete(String[] ids) {
        for (String id : ids) {
            orderTemplateItemDao.delete(id);
        }

    }

    public void saveNumber(List<OrderTemplateItem> results) {
        for (OrderTemplateItem orderTemplateItem : results) {
            this.save(orderTemplateItem);
        }

        getDao().getSession().flush();
        getDao().getSession().clear();
    }
}
